Skip to content

自定义模块

自定义模块就是自己创建一个.py 文件,写入相应的函数和变量,形成一个独立的模块。

import 语句

想使用 Python 源文件,只需在另一个源文件里执行 import 语句:

import module1[, module2[,... moduleN]

下面演示了一个 main.py 文件如何调用 greeting.py 模块。

python
# 文件: greeting.py
def sayHi( name ):
    print ("Hi", name)
python
# 文件: main.py
import greeting
greeting.sayHi('Oldmoon') #输出Hi Oldmoon

路径问题

使用import greeting时,要保证 main.py 和 greeting.py 在同一个文件夹路径下,或者将 greeting.py 文件放置到 Python 的搜索路径中。

Python 的搜索路径可以使用以下代码查看:

python
import sys
print(sys.path)

from … import 语句

Python 的 from … import 语句可以从模块中导入一个指定的部分到文件:

from modname import name1[, name2[, ... nameN]]

python
# 文件: greeting.py
def sayBye( name ):
    print ("Bye", name)

def sayHi( name ):
    print ("Hi", name)

def sayNo( name ):
    print ("No", name)
python
# 文件: main.py
from greeting import sayHi, sayBye
greeting.sayHi('Oldmoon') #输出Hi Oldmoon
greeting.sayBye('Oldmoon') #输出Bye Oldmoon
greeting.sayNo('Oldmoon') #报错,因为没有引入sayNo

from … import * 语句

还可以使用from … import *语句把一个模块的所有内容全都导入到当前文件:

from modname import *

python
# 文件: greeting.py
def sayBye( name ):
    print ("Bye", name)

def sayHi( name ):
    print ("Hi", name)

def sayNo( name ):
    print ("No", name)
python
# 文件: main.py
from greeting import *
sayHi('Oldmoon') #输出Hi Oldmoon
sayBye('Oldmoon') #输出Bye Oldmoon
sayNo('Oldmoon') #输出No Oldmoon

全局变量与函数

使用from greeting import *时,sayHi 等函数会变成 main.py 中的全局函数,不需要再使用greeting.sayHi。这样看起来是方便了很多,但是要谨慎使用!因为不同的模块可能会有函数名或变量名的冲突。例如:

python
# 文件: greeting.py
def sayBye( name ):
    print ("Bye", name)

def sayHi( name ):
    print ("Hi", name)

def sayNo( name ):
    print ("No", name)
python
# 文件: hi.py
def sayHi( name ):
    print ("Hi New", name)
python
# 文件: main.py
from greeting import *
from hi import *
sayHi('Oldmoon') #输出Hi New Oldmoon,greeting中的sayHi会被hi中的sayHi覆盖。
sayBye('Oldmoon') #输出Bye Oldmoon
sayNo('Oldmoon') #输出No Oldmoon